import axios from 'axios';
import qs from 'qs';

// 创建 Axios 实例
const service = axios.create({
    baseURL: process.env.VUE_APP_API_BASE_URL, // 基础 URL，根据环境变量配置
    timeout: 5000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded'
    }
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 在发送请求之前可以做些什么
        if (config.method === 'post' || config.method === 'put') {
            config.data = qs.stringify(config.data); // 序列化表单数据
        }
        return config;
    },
    error => {
        // 请求错误处理
        console.error('Request Error:', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        const res = response.data;
        // 对响应数据做点什么
        if (res.code !== 200) {
            // 处理错误情况，例如显示错误消息或跳转到错误页面
            // 可以根据实际情况决定是否抛出错误
            return Promise.reject(new Error(res.message || 'Error'));
        } else {
            return res;
        }
    },
    error => {
        // 响应错误处理
        console.error('Response Error:', error);
        return Promise.reject(error);
    }
);

// 封装请求方法
const request = {
    get: (url, params) => service.get(url, {
        params
    }),
    post: (url, data) => service.post(url, data),
    put: (url, data) => service.put(url, data),
    delete: (url) => service.delete(url),
    patch: (url, data) => service.patch(url, data),
};

// 取消请求的方法
const cancel = (source) => {
    source.cancel('Operation canceled by the user.');
};

export {
    request,
    cancel
};